{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import time\n",
    "import lightgbm as lgb\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import re\n",
    "import matplotlib.pylab as plt\n",
    "from sklearn import metrics\n",
    "from sklearn.metrics import mean_squared_error\n",
    "import scorecardpy as sc\n",
    "from sklearn.feature_selection import RFE\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from collections import Counter\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.metrics import roc_curve\n",
    "try:\n",
    "    import cPickle as pickle\n",
    "except BaseException:\n",
    "    import pickle\n",
    "import os\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义KS计算函数\n",
    "from sklearn.metrics import roc_curve\n",
    "def calKS(y,y_pred):\n",
    "    fpr, tpr, threshold = metrics.roc_curve(y, y_pred)\n",
    "    return max(tpr - fpr)\n",
    "\n",
    "\n",
    "#类别变量转数值变量\n",
    "def cate_var_transform(X, Y):\n",
    "    ##取出数据类型\n",
    "    d_type = X.dtypes\n",
    "    object_var = X.iloc[:, np.where(d_type == \"object\")[0]]\n",
    "    num_var = X.iloc[:, np.where(d_type != \"object\")[0]]\n",
    "\n",
    "    # object_transfer_rule用于记录每个类别变量的数值转换规则\n",
    "    object_transfer_rule = list(np.zeros([len(object_var.columns)]))\n",
    "\n",
    "    # object_transform是类别变量数值化转化后的值\n",
    "    object_transform = pd.DataFrame(np.zeros(object_var.shape),\n",
    "                                    columns=object_var.columns)\n",
    "\n",
    "    for i in range(0, len(object_var.columns)):\n",
    "\n",
    "        temp_var = object_var.iloc[:, i]\n",
    "\n",
    "        ##除空值外的取值种类\n",
    "        unique_value = np.unique(temp_var.iloc[np.where(~temp_var.isna())[0]])\n",
    "\n",
    "        transform_rule = pd.concat([pd.DataFrame(unique_value, columns=['raw data']),\n",
    "                                    pd.DataFrame(np.zeros([len(unique_value), 2]),\n",
    "                                                 columns=['transform data', 'bad rate'])], axis=1)\n",
    "        for j in range(0, len(unique_value)):\n",
    "            bad_num = len(np.where((Y == 1) & (temp_var == unique_value[j]))[0])\n",
    "            all_num = len(np.where(temp_var == unique_value[j])[0])\n",
    "\n",
    "            # 计算badprob\n",
    "            if all_num == 0:  # 防止all_num=0的情况，报错\n",
    "                all_num = 0.5\n",
    "            transform_rule.iloc[j, 2] = 1.0000000 * bad_num / all_num\n",
    "\n",
    "        # 按照badprob排序，给出转换后的数值\n",
    "        transform_rule = transform_rule.sort_values(by='bad rate')\n",
    "        transform_rule.iloc[:, 1] = list(range(len(unique_value), 0, -1))\n",
    "\n",
    "        # 保存转换规则\n",
    "        object_transfer_rule[i] = {object_var.columns[i]: transform_rule}\n",
    "        # 转换变量\n",
    "        for k in range(0, len(unique_value)):\n",
    "            transfer_value = transform_rule.iloc[np.where(transform_rule.iloc[:, 0] == unique_value[k])[0], 1]\n",
    "            object_transform.iloc[np.where(temp_var == unique_value[k])[0], i] = float(transfer_value)\n",
    "        object_transform.iloc[np.where(object_transform.iloc[:, i] == 0)[0], i] = np.nan\n",
    "\n",
    "    X_transformed = pd.concat([num_var, object_transform], axis=1)\n",
    "    return (X_transformed, transform_rule)\n",
    "\n",
    "#去除缺失率、单一值率过高的变量\n",
    "def missing_identity_select(data,y='flagy', missing_rate=0.9, identity_rate=0.9, kp_vars=None):\n",
    "    if kp_vars:\n",
    "        data1 = data.drop(columns=kp_vars)\n",
    "    else:\n",
    "        data1 = data.copy()\n",
    "    null_ratio = data1.isnull().sum() / data1.shape[0]\n",
    "    data1 = data1.iloc[:,np.where(null_ratio <= missing_rate)[0]]\n",
    "    identity = data1.drop(columns='flagy').apply(lambda x: x.value_counts().max() / x.size).reset_index(name='identity_rate').rename(columns={'index': 'variable'})\n",
    "    identity_vars = identity[identity['identity_rate'] <= identity_rate]['variable'].to_list()\n",
    "    data1 = data[identity_vars + kp_vars + ['flagy']]\n",
    "    return data1\n",
    "#剔除自变量与因变量相关性过低、自变量与自变量相关性高的变量\n",
    "def delete_corelation(data, y='flagy', y_cor=0.1, x_cor=0.7, kp_vars=None):\n",
    "    if kp_vars:\n",
    "        data1 = data.drop(columns=kp_vars) \n",
    "    cor = data1.corr().abs()\n",
    "    cor_y = cor[y]\n",
    "    y_select = cor_y[cor_y >= y_cor ]\n",
    "    y_select.sort_values(ascending=False)\n",
    "    cor_x = cor.loc[y_select.index.values, y_select.index.values]\n",
    "    cor_x.drop(labels=y, inplace=True)\n",
    "    cor_x.drop(columns=y, inplace=True)\n",
    "    drop_index = []\n",
    "    for i in range(len(cor_x)-1):\n",
    "        drop_index.extend(np.where(cor_x.iloc[i+1:,i] >= x_cor)[0])\n",
    "    drop_index = list(set(drop_index))\n",
    "    drop_name = cor_x.index[drop_index].tolist()\n",
    "    cor_x.drop(index=drop_name, inplace=True)\n",
    "    final_vars = cor_x.index.tolist() + kp_vars + [y]\n",
    "    data = data[final_vars]\n",
    "    return data\n",
    "#变量PSI计算\n",
    "def psi_var(data_train, data_test):\n",
    "    data_train1 = data_train.copy()\n",
    "    data_test1 = data_test.copy()\n",
    "    var_names = data_train.columns.tolist()\n",
    "    drop = []\n",
    "    for name in var_names:\n",
    "        num = data_train[name].unique().shape[0]\n",
    "        if num <= 6:\n",
    "            breaks = np.linspace(data_train[name].min()-1, data_train[name].max(), num+1)\n",
    "        else:\n",
    "            breaks = np.linspace(data_train[name].min()-1, data_train[name].max(), 6+1)\n",
    "        data_train1[name] = pd.cut(data_train[name], bins=breaks, right=True)\n",
    "        data_test1[name] = pd.cut(data_test[name], bins=breaks, right=True)\n",
    "        data_train1[name] = data_train1[name].astype(str)\n",
    "        data_test1[name] = data_test1[name].astype(str)\n",
    "        df1 = data_train1[name].value_counts().rename('train')\n",
    "        df2 = data_test1[name].value_counts().rename('test')\n",
    "        df = pd.concat([df1, df2], axis=1)\n",
    "        df['train_ratio'] = df.train / df.train.sum()\n",
    "        df['test_ratio'] = df.test / df.test.sum()\n",
    "        df['psi'] = (df.train_ratio - df.test_ratio) * np.log(df.train_ratio / df.test_ratio)\n",
    "        df.psi.replace(np.inf, 0)\n",
    "        if df.psi.sum() > 0.1:\n",
    "            #del data_train[name]\n",
    "            #del data_test[name]\n",
    "            drop.append(name)\n",
    "        del df1\n",
    "        del df2\n",
    "        del df\n",
    "    print('PSI偏高的被剔除的变量：\\n{}'.format(drop))\n",
    "    return drop\n",
    "\n",
    "def psi_var_table(data_train, data_test):\n",
    "    psi_table = pd.DataFrame()\n",
    "    data_train1 = data_train.copy()\n",
    "    data_test1 = data_test.copy()\n",
    "    var_names = data_train.columns.tolist()\n",
    "    drop = []\n",
    "    for name in var_names:\n",
    "        num = data_train[name].unique().shape[0]\n",
    "        if num <= 6:\n",
    "            breaks = data_train[name].value_counts().sort_index().index.to_list()\n",
    "            #breaks = np.linspace(data_train[name].min()-1, data_train[name].max(), num+1)\n",
    "        else:\n",
    "            breaks = np.linspace(data_train[name].min(), data_train[name].max(), 6)\n",
    "        \n",
    "        breaks = [-np.inf] + list(breaks) + [np.inf]\n",
    "        data_train1[name] = pd.cut(data_train[name], bins=breaks, right=True)\n",
    "        data_test1[name] = pd.cut(data_test[name], bins=breaks, right=True)\n",
    "        data_train1[name] = data_train1[name].astype(str)\n",
    "        data_test1[name] = data_test1[name].astype(str)\n",
    "        df1 = data_train1[name].value_counts().rename('train')\n",
    "        df2 = data_test1[name].value_counts().rename('test')\n",
    "        df = pd.concat([df1, df2], axis=1)\n",
    "        df['train_ratio'] = df.train / df.train.sum()\n",
    "        df['test_ratio'] = df.test / df.test.sum()\n",
    "        df['psi'] = (df.train_ratio - df.test_ratio) * np.log(df.train_ratio / df.test_ratio)\n",
    "        #df.psi.replace(np.inf, 0)\n",
    "        df['psi_all'] = df.psi.sum()\n",
    "        df['var'] = name\n",
    "        df.reset_index(inplace=True)\n",
    "        psi_table = pd.concat([psi_table, df],axis=0, sort=False)\n",
    "        psi_table = psi_table[['var', 'index','train', 'train_ratio', 'test', 'test_ratio', 'psi', 'psi_all']]\n",
    "    return psi_table"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('建模样本&自定标签&之前标签.csv',index_col = 'cus_num',low_memory = False,encoding = 'utf-8')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cell</th>\n",
       "      <th>id</th>\n",
       "      <th>name</th>\n",
       "      <th>user_date</th>\n",
       "      <th>other_var1</th>\n",
       "      <th>custApiCode</th>\n",
       "      <th>other_var2</th>\n",
       "      <th>swift_number</th>\n",
       "      <th>cus_username</th>\n",
       "      <th>code</th>\n",
       "      <th>...</th>\n",
       "      <th>alu_m12_cell_max_monnum</th>\n",
       "      <th>alu_m12_cell_min_monnum</th>\n",
       "      <th>alu_fst_id_inteday</th>\n",
       "      <th>alu_lst_id_inteday</th>\n",
       "      <th>alu_fst_cell_inteday</th>\n",
       "      <th>alu_lst_cell_inteday</th>\n",
       "      <th>flag_fraudrelation_g</th>\n",
       "      <th>frg_list_level</th>\n",
       "      <th>frg_group_num</th>\n",
       "      <th>flagy</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cus_num</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>649BF8AD60FAC303FD94B7D41FB52E16A8E53DB1125AB3...</td>\n",
       "      <td>9F845C5F7EFC5B783BA399726B97654D832A2FA00849F7...</td>\n",
       "      <td>张##</td>\n",
       "      <td>2021-03-25</td>\n",
       "      <td>jzdcs</td>\n",
       "      <td>100001</td>\n",
       "      <td>1</td>\n",
       "      <td>4005527_20210811104507_52990782A</td>\n",
       "      <td>chang.lu_test</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4224F1B85C4F00B65D2DEF3424728B9F271E446A4DBD7F...</td>\n",
       "      <td>67B18EB2185CAC0792DF706CEAAFE93AE1187E6A483E60...</td>\n",
       "      <td>张##</td>\n",
       "      <td>2021-03-25</td>\n",
       "      <td>jzdcs</td>\n",
       "      <td>100001</td>\n",
       "      <td>0</td>\n",
       "      <td>4005527_20210811104507_468805A9A</td>\n",
       "      <td>chang.lu_test</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>73C5FA2264A2A574CC8AD15A9CAA021DDF6C1F60B364AD...</td>\n",
       "      <td>13C103356DC73C860FB5D009EF2C1947599094C565A4D9...</td>\n",
       "      <td>张##</td>\n",
       "      <td>2021-03-25</td>\n",
       "      <td>jzdcs</td>\n",
       "      <td>100001</td>\n",
       "      <td>0</td>\n",
       "      <td>4005527_20210811104507_08410420A</td>\n",
       "      <td>chang.lu_test</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>01CEB2D50F2C09C2C68F9674EB08E2C7F0ED672293BEC2...</td>\n",
       "      <td>82529756181D23ED5F8603FF9B4DD30DAA8D3A6BA32848...</td>\n",
       "      <td>张##</td>\n",
       "      <td>2021-03-25</td>\n",
       "      <td>jzdcs</td>\n",
       "      <td>100001</td>\n",
       "      <td>0</td>\n",
       "      <td>4005527_20210811104507_08400420A</td>\n",
       "      <td>chang.lu_test</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>F5FEB2AAB5A6294212C117CAF843432C1C21DB7D3E90A7...</td>\n",
       "      <td>FDDB09AB4BFE0857627681B895C0AE99234758FBE97C62...</td>\n",
       "      <td>张##</td>\n",
       "      <td>2021-03-25</td>\n",
       "      <td>jzdcs</td>\n",
       "      <td>100001</td>\n",
       "      <td>0</td>\n",
       "      <td>4005527_20210811104507_52980782A</td>\n",
       "      <td>chang.lu_test</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 3821 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                      cell  \\\n",
       "cus_num                                                      \n",
       "1        649BF8AD60FAC303FD94B7D41FB52E16A8E53DB1125AB3...   \n",
       "2        4224F1B85C4F00B65D2DEF3424728B9F271E446A4DBD7F...   \n",
       "3        73C5FA2264A2A574CC8AD15A9CAA021DDF6C1F60B364AD...   \n",
       "4        01CEB2D50F2C09C2C68F9674EB08E2C7F0ED672293BEC2...   \n",
       "5        F5FEB2AAB5A6294212C117CAF843432C1C21DB7D3E90A7...   \n",
       "\n",
       "                                                        id name   user_date  \\\n",
       "cus_num                                                                       \n",
       "1        9F845C5F7EFC5B783BA399726B97654D832A2FA00849F7...  张##  2021-03-25   \n",
       "2        67B18EB2185CAC0792DF706CEAAFE93AE1187E6A483E60...  张##  2021-03-25   \n",
       "3        13C103356DC73C860FB5D009EF2C1947599094C565A4D9...  张##  2021-03-25   \n",
       "4        82529756181D23ED5F8603FF9B4DD30DAA8D3A6BA32848...  张##  2021-03-25   \n",
       "5        FDDB09AB4BFE0857627681B895C0AE99234758FBE97C62...  张##  2021-03-25   \n",
       "\n",
       "        other_var1  custApiCode  other_var2                      swift_number  \\\n",
       "cus_num                                                                         \n",
       "1            jzdcs       100001           1  4005527_20210811104507_52990782A   \n",
       "2            jzdcs       100001           0  4005527_20210811104507_468805A9A   \n",
       "3            jzdcs       100001           0  4005527_20210811104507_08410420A   \n",
       "4            jzdcs       100001           0  4005527_20210811104507_08400420A   \n",
       "5            jzdcs       100001           0  4005527_20210811104507_52980782A   \n",
       "\n",
       "          cus_username  code  ...  alu_m12_cell_max_monnum  \\\n",
       "cus_num                       ...                            \n",
       "1        chang.lu_test     0  ...                      NaN   \n",
       "2        chang.lu_test     0  ...                      NaN   \n",
       "3        chang.lu_test     0  ...                      NaN   \n",
       "4        chang.lu_test     0  ...                      NaN   \n",
       "5        chang.lu_test     0  ...                      NaN   \n",
       "\n",
       "         alu_m12_cell_min_monnum  alu_fst_id_inteday  alu_lst_id_inteday  \\\n",
       "cus_num                                                                    \n",
       "1                            NaN                 NaN                 NaN   \n",
       "2                            NaN                 NaN                 NaN   \n",
       "3                            NaN                 NaN                 NaN   \n",
       "4                            NaN                 NaN                 NaN   \n",
       "5                            NaN                 NaN                 NaN   \n",
       "\n",
       "         alu_fst_cell_inteday  alu_lst_cell_inteday  flag_fraudrelation_g  \\\n",
       "cus_num                                                                     \n",
       "1                         NaN                   NaN                     0   \n",
       "2                         NaN                   NaN                     0   \n",
       "3                         NaN                   NaN                     0   \n",
       "4                         NaN                   NaN                     0   \n",
       "5                         NaN                   NaN                     0   \n",
       "\n",
       "         frg_list_level  frg_group_num  flagy  \n",
       "cus_num                                        \n",
       "1                   NaN            NaN      0  \n",
       "2                   NaN            NaN      0  \n",
       "3                   NaN            NaN      0  \n",
       "4                   NaN            NaN      0  \n",
       "5                   NaN            NaN      0  \n",
       "\n",
       "[5 rows x 3821 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.799999999999999%\n"
     ]
    }
   ],
   "source": [
    "# 坏客率\n",
    "badper = sum(df['flagy'] == 1)/len(df['flagy']) * 100\n",
    "print(f'{badper}%')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.drop(columns = ['name','id','cell','swift_number','cus_username','code'],inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5000, 3815)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 变量粗筛"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5000, 1037)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 2.1 缺失值、同一值过高\n",
    "data = missing_identity_select(df, 'flagy', missing_rate=0.9, identity_rate=0.9, kp_vars=['user_date']) \n",
    "# data = delete_corelation(data, 'flagy', y_cor=0.0, x_cor=0.95, kp_vars=['user_date'])\n",
    "data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据分层"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "drop_vars = [\n",
    "    'als_m1_cell_rel_allnum', 'als_m1_id_rel_allnum', 'als_m1_id_rel_orgnum',\n",
    "    'user_date', 'als_m1_cell_rel_orgnum', 'ir_m1_id_x_cell_cnt',\n",
    "    'ir_m1_id_x_name_cnt', 'ir_m1_id_x_tel_home_cnt',\n",
    "    'ir_m1_cell_x_linkman_cell_cnt', 'ir_m1_id_x_mail_cnt',\n",
    "    'ir_m1_id_x_biz_addr_cnt','ir_m1_id_x_tel_biz_cnt'\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "drop_vars = ['other_var2', 'flag_inforelation','user_date']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "drop_vars = ['flagy', 'flag_inforelation','user_date']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "Y = data['flagy']\n",
    "X = data.drop(columns=['flagy'])\n",
    "\n",
    "# X_transform, transfrom_rule = cate_var_transform(X, Y, kp_vars = ['user_date', 'id', 'cell'])\n",
    "data_train_x, data_test_x, data_train_y, data_test_y = train_test_split(X, Y, test_size=0.3, random_state=999, stratify=Y)\n",
    "# 定义数据集\n",
    "Y_train = data_train_y\n",
    "X_train = data_train_x.drop(columns = drop_vars)\n",
    "Y_test = data_test_y\n",
    "X_test = data_test_x.drop(columns = drop_vars)\n",
    "# 转换成lgb支持的格式\n",
    "W_train = np.ones(X_train.shape[0])\n",
    "W_test = np.ones(X_test.shape[0])\n",
    "lgb_train = lgb.Dataset(X_train,Y_train,weight = W_train,free_raw_data = False)\n",
    "lgb_eval = lgb.Dataset(X_test,Y_test,reference = lgb_train,weight = W_test,free_raw_data = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "object_vars = X_train.select_dtypes(include='O').columns.tolist()\n",
    "X_train.drop(columns=object_vars, inplace=True)\n",
    "X_test.drop(columns=object_vars, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型调参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义超参数优化（贝叶斯优化——Tree Parzen估计）\n",
    "#objective函数里设计了三种loss funtion的形式，不同的loss funtion 会导致收敛速度不一样。还需要研究怎么设计loss function能比较快得达到最优。\n",
    "from hyperopt import STATUS_OK\n",
    "from timeit import default_timer as timer\n",
    "MAX_EVALS = 100\n",
    "N_FOLDS = 5\n",
    "\n",
    "\n",
    "###定义超参数优化的目标函数\n",
    "def objective(params, n_folds = N_FOLDS):\n",
    "    \"\"\"Objective function for Gradient Boosting Machine Hyperparameter Optimization\"\"\"\n",
    "    \n",
    "    # Keep track of evals\n",
    "    global ITERATION\n",
    "    \n",
    "    ITERATION += 1\n",
    "    \n",
    "    # Retrieve the subsample if present otherwise set to 1.0\n",
    "    subsample = params['boosting_type'].get('bagging_fraction', 1.0)\n",
    "    \n",
    "    # Extract the boosting type\n",
    "    params['boosting_type'] = params['boosting_type']['boosting_type']\n",
    "    params['bagging_fraction'] = subsample\n",
    "    \n",
    "    # Make sure parameters that need to be integers are integers\n",
    "    for parameter_name in ['num_leaves', 'bagging_freq', 'min_data_in_leaf', 'max_bin', 'max_depth', 'n_estimators']:\n",
    "        params[parameter_name] = int(params[parameter_name])\n",
    "    params['num_leaves'] = min((params['num_leaves'], 2 ** params['max_depth']))\n",
    "    for parameter_name in ['learning_rate', 'bagging_fraction', 'feature_fraction', 'reg_lambda', 'reg_alpha']:\n",
    "        params[parameter_name] = round(params[parameter_name], 4)\n",
    "    start = timer()\n",
    "     \n",
    "    # Perform n_folds cross validation\n",
    "    lgb_model = lgb.LGBMClassifier(n_jobs = -1, \n",
    "                                       objective = 'binary', random_state = 50 , **params)\n",
    "    lgb_model.fit(X_train, Y_train)\n",
    "    pred1 = lgb_model.predict_proba(X_train)[:,1]\n",
    "    pred2 = lgb_model.predict_proba(X_test)[:,1]\n",
    "    auc1 = roc_auc_score(Y_train, pred1)\n",
    "    auc2 = roc_auc_score(Y_test, pred2)\n",
    "    run_time = timer() - start\n",
    "    \n",
    "    # Extract the best score\n",
    "    loss = abs(auc1 - auc2) / auc2 - auc2\n",
    "    \n",
    "    # Dictionary with information for evaluation\n",
    "    return {'loss': loss, 'params': params, 'iteration': ITERATION,\n",
    "            'train_time': run_time, 'status': STATUS_OK}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "###定义搜索域\n",
    "\n",
    "'''\n",
    "hp.choice返回一个选项，选项可以是list或者tuple.options可以是嵌套的表达式，用于组成条件参数。 \n",
    "hp.pchoice(label,p_options)以一定的概率返回一个p_options的一个选项。这个选项使得函数在搜索过程中对每个选项的可能性不均匀。 \n",
    "hp.uniform(label,low,high)参数在low和high之间均匀分布。 \n",
    "hp.quniform(label,low,high,q),参数的取值是round(uniform(low,high)/q)*q，适用于那些离散的取值。 \n",
    "hp.loguniform(label,low,high)绘制exp(uniform(low,high)),变量的取值范围是[exp(low),exp(high)] \n",
    "hp.randint(label,upper) 返回一个在[0,upper)前闭后开的区间内的随机整数\n",
    "'''\n",
    "from hyperopt import hp\n",
    "from hyperopt.pyll.stochastic import sample\n",
    "space = {\n",
    "#     'boosting_type': hp.choice('boosting_type', [{'boosting_type': 'gbdt', 'bagging_fraction': hp.uniform('gbdt_bagging_fraction', 0.5, 1)}, \n",
    "#                                                  {'boosting_type': 'dart', 'bagging_fraction': hp.uniform('dart_bagging_fraction', 0.5, 1)},\n",
    "#                                                  {'boosting_type': 'goss', 'bagging_fraction': 1.0}]),\n",
    "    'boosting_type': hp.choice('boosting_type', [{'boosting_type': 'gbdt', 'bagging_fraction': hp.uniform('gbdt_bagging_fraction', 0.5, 1)}]),\n",
    "    'num_leaves': hp.quniform('num_leaves', 4, 32, 1),\n",
    "    'learning_rate': hp.loguniform('learning_rate', np.log(0.01), np.log(0.2)),\n",
    "    'bagging_freq': hp.uniform('bagging_freq', 0, 5),\n",
    "    'feature_fraction': hp.uniform('feature_fraction', 0.5, 1),\n",
    "    'min_data_in_leaf': hp.uniform('min_data_in_leaf', 10, 100),\n",
    "    'max_bin': hp.uniform('max_bin', 4, 20),\n",
    "    'reg_alpha': hp.uniform('reg_alpha', 0.0, 1.0),\n",
    "    'reg_lambda': hp.uniform('reg_lambda', 0.0, 1.0),\n",
    "    'importance_type': 'gain',\n",
    "    'max_depth': hp.uniform('max_depth', 2, 6),\n",
    "    'n_estimators': hp.uniform('n_estimators', 50, 200),\n",
    "#     'min_gain_to_split': hp.uniform('n_estimators', 0, 100),\n",
    "    #     'subsample_for_bin': hp.quniform('subsample_for_bin', 20000, 300000, 20000),\n",
    "#     'min_child_samples': hp.quniform('min_child_samples', 20, 500, 5),\n",
    "#     'reg_alpha': hp.uniform('reg_alpha', 0.0, 1.0),\n",
    "#     'reg_lambda': hp.uniform('reg_lambda', 0.0, 1.0),\n",
    "#     'colsample_bytree': hp.uniform('colsample_by_tree', 0.6, 1.0)\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.81, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.81               \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=87, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=87                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6681, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6681                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8547, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8547           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=66, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=66                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5625, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5625                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8252, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8252           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=54, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=54                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9363, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9363                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5788, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5788           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=48, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=48                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6918, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6918                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7141, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7141           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=63, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=63                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6616, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6616                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9172, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9172           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=53, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=53                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6139, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6139                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.56, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.56               \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=84, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=84                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7381, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7381                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8695, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8695           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=62, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=62                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9391, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9391                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7136, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7136           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=95, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=95                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.679, subsample=1.0 will be ignored. Current value: bagging_fraction=0.679                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.81, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.81               \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=85, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=85                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7978, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7978                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5515, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5515           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=72, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=72                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.528, subsample=1.0 will be ignored. Current value: bagging_fraction=0.528                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7399, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7399           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=29, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=29                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7643, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7643                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6628, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6628           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=62, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=62                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7079, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7079                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6934, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6934           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=92, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=92                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6629, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6629                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8802, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8802           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=84, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=84                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6229, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6229                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5997, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5997           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=15, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=15                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6318, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6318                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7422, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7422           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=41, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=41                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5535, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5535                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6119, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6119           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=36, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=36                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5448, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5448                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9837, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9837           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=11, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=11                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9879, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9879                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5597, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5597           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=10, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=10                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9201, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9201                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5243, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5243           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=44, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=44                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8202, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8202                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5028, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5028           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=24, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=24                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.835, subsample=1.0 will be ignored. Current value: bagging_fraction=0.835                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5153, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5153           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=24, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=24                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8372, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8372                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5187, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5187           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=22, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=22                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8663, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8663                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6407, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6407           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=26, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=26                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8746, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8746                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5086, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5086           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=21, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=21                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8441, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8441                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5062, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5062           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=34, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=34                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9917, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9917                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6539, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6539           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=17, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=17                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9026, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9026                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7766, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7766           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=31, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=31                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7663, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7663                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9838, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9838           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=40, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=40                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8018, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8018                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6113, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6113           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=11, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=11                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9641, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9641                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5311, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5311           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=25, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=25                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7298, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7298                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5006, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5006           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=48, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=48                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8969, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8969                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5924, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5924           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=73, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=73                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8371, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8371                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6319, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6319           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=36, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=36                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7914, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7914                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9378, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9378           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=16, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=16                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8677, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8677                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6938, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6938           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=58, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=58                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9527, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9527                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5783, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5783           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=48, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=48                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5855, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5855                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7695, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7695           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=29, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=29                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7121, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7121                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8323, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8323           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=55, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=55                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7674, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7674                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5577, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5577           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=20, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=20                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.834, subsample=1.0 will be ignored. Current value: bagging_fraction=0.834                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5405, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5405           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=70, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=70                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9236, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9236                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6862, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6862           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=14, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=14                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8945, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8945                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5787, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5787           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=76, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=76                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7406, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7406                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6699, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6699           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=50, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=50                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7868, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7868                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7155, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7155           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=26, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=26                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6901, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6901                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9124, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9124           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=43, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=43                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.641, subsample=1.0 will be ignored. Current value: bagging_fraction=0.641                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7841, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7841           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=99, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=99                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.971, subsample=1.0 will be ignored. Current value: bagging_fraction=0.971                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.634, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.634             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=58, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=58                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8181, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8181                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8551, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8551           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=38, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=38                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5858, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5858                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7226, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7226           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=32, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=32                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7173, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7173                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.535, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.535             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=12, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=12                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7514, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7514                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6185, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6185           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=66, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=66                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9317, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9317                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5892, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5892           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=45, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=45                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6525, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6525                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8001, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8001           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=23, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=23                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.852, subsample=1.0 will be ignored. Current value: bagging_fraction=0.852                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5688, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5688           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=19, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=19                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8168, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8168                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7588, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7588           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=52, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=52                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8884, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8884                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5433, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5433           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=31, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=31                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6771, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6771                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5098, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5098           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=79, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=79                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8539, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8539                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9506, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9506           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=37, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=37                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.5076, subsample=1.0 will be ignored. Current value: bagging_fraction=0.5076                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6564, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6564           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=26, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=26                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9488, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9488                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8921, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8921           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=90, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=90                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9166, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9166                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6828, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6828           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=41, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=41                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7742, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7742                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5217, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5217           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=28, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=28                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9997, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9997                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.729, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.729             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=34, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=34                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7007, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7007                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5152, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5152           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=22, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=22                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8822, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8822                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6048, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6048           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=14, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=14                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8613, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8613                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5019, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5019           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=23, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=23                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8046, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8046                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5531, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5531           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=16, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=16                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7833, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7833                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6238, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6238           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=33, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=33                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9779, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9779                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5632, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5632           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=28, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=28                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8337, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8337                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5004, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5004           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=39, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=39                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.874, subsample=1.0 will be ignored. Current value: bagging_fraction=0.874                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5254, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5254           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=10, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=10                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.754, subsample=1.0 will be ignored. Current value: bagging_fraction=0.754                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6485, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6485           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=19, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=19                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9037, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9037                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5941, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5941           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=46, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=46                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7294, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7294                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5786, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5786           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=42, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=42                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9116, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9116                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=0, subsample_freq=0 will be ignored. Current value: bagging_freq=0                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.544, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.544             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=21, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=21                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8038, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8038                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5692, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5692           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=30, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=30                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9437, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9437                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=1, subsample_freq=0 will be ignored. Current value: bagging_freq=1                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6714, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6714           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=25, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=25                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8248, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8248                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6732, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6732           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=35, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=35                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8365, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8365                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7028, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7028           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=25, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=25                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8247, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8247                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8115, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8115           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=50, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=50                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8481, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8481                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7478, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7478           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=57, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=57                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7806, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7806                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8358, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8358           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=18, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=18                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9611, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9611                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.645, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.645             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=62, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=62                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.737, subsample=1.0 will be ignored. Current value: bagging_fraction=0.737                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.703, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.703             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=15, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=15                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7624, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7624                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.626, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.626             \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=38, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=38                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7956, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7956                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7947, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7947           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=46, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=46                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8753, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8753                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.9704, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.9704           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=12, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=12                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8171, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8171                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6111, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6111           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=33, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=33                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7184, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7184                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7335, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7335           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=60, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=60                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6939, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6939                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5837, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5837           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=54, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=54                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6168, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6168                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.7584, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.7584           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=66, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=66                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9267, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9267                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.8805, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.8805           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=27, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=27                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8108, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8108                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=2, subsample_freq=0 will be ignored. Current value: bagging_freq=2                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6614, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6614           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=30, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=30                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.6754, subsample=1.0 will be ignored. Current value: bagging_fraction=0.6754                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5361, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5361           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=24, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=24                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.855, subsample=1.0 will be ignored. Current value: bagging_fraction=0.855                    \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5981, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5981           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=17, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=17                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.8838, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8838                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6376, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6376           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=81, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=81                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9053, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9053                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=4, subsample_freq=0 will be ignored. Current value: bagging_freq=4                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.6762, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6762           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=70, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=70                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.9339, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9339                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "feature_fraction is set=0.5123, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5123           \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "min_data_in_leaf is set=36, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=36                   \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_fraction is set=0.7605, subsample=1.0 will be ignored. Current value: bagging_fraction=0.7605                  \n",
      "[LightGBM] [Warning]                                                                                                   \n",
      "bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3                                 \n",
      "100%|█████████████████████████████████████████████| 100/100 [01:59<00:00,  1.19s/trial, best loss: -0.7692008345994636]\n"
     ]
    }
   ],
   "source": [
    "#定义优化函数\n",
    "from hyperopt import tpe\n",
    "#定义结果存储变量\n",
    "from hyperopt import Trials\n",
    "# Keep track of results\n",
    "bayes_trials = Trials()\n",
    "#定义中间结果存储文件\n",
    "# out_file = 'results/gbm_trials.csv'\n",
    "# of_connection = open(out_file, 'w')\n",
    "# writer = csv.writer(of_connection)\n",
    "\n",
    "# # Write the headers to the file\n",
    "# writer.writerow(['loss', 'params', 'iteration', 'estimators', 'train_time'])\n",
    "# of_connection.close()\n",
    "\n",
    "### 求最优解\n",
    "from hyperopt import fmin\n",
    "# Global variable\n",
    "global  ITERATION\n",
    "\n",
    "ITERATION = 0\n",
    "\n",
    "# Run optimization\n",
    "best = fmin(fn = objective, space = space, algo = tpe.suggest, \n",
    "            max_evals = MAX_EVALS, trials = bayes_trials, rstate = np.random.RandomState(123))\n",
    "#按loss从小到大排序\n",
    "# Sort the trials with lowest loss (highest AUC) first\n",
    "bayes_trials_results = sorted(bayes_trials.results, key = lambda x: x['loss'])\n",
    "bayes_trials_results[:2]\n",
    "#结果\n",
    "# results = pd.read_csv('d:/gbm_trials.csv')\n",
    "# Sort with best scores on top and reset index for slicing\n",
    "# results.sort_values('loss', ascending = True, inplace = True)\n",
    "# results.reset_index(inplace = True, drop = True)\n",
    "# results.head()\n",
    "# import ast\n",
    "# Convert from a string to a dictionary\n",
    "# ast.literal_eval(bayes_trials_results.loc[0, 'params'])\n",
    "#获取最优的超参数\n",
    "# best_bayes_estimators = int(bayes_trials_results[0]['estimators'])\n",
    "best_bayes_params = bayes_trials_results[0]['params']\n",
    "# Re-create the best model and train on the training data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'bagging_fraction': 0.8372,\n",
       " 'bagging_freq': 3,\n",
       " 'boosting_type': 'gbdt',\n",
       " 'feature_fraction': 0.5153,\n",
       " 'importance_type': 'gain',\n",
       " 'learning_rate': 0.0225,\n",
       " 'max_bin': 15,\n",
       " 'max_depth': 2,\n",
       " 'min_data_in_leaf': 24,\n",
       " 'n_estimators': 90,\n",
       " 'num_leaves': 4,\n",
       " 'reg_alpha': 0.4626,\n",
       " 'reg_lambda': 0.5525}"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "best_bayes_params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "################################## 手动调整参数 #####################################\n",
    "best_bayes_params = {'bagging_fraction': 0.8372,\n",
    " 'bagging_freq': 3,\n",
    " 'boosting_type': 'gbdt',\n",
    " 'feature_fraction': 0.5153,\n",
    " 'importance_type': 'gain',\n",
    " 'learning_rate': 0.0225,\n",
    " 'max_bin': 15,\n",
    " 'max_depth': 2,\n",
    " 'min_data_in_leaf': 24,\n",
    " 'n_estimators': 90,\n",
    " 'num_leaves': 4,\n",
    " 'reg_alpha': 0.4626,\n",
    " 'reg_lambda': 0.5525}\n",
    "# 'min_gain_to_split': 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting training...\n",
      "[LightGBM] [Warning] feature_fraction is set=0.5153, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5153\n",
      "[LightGBM] [Warning] min_data_in_leaf is set=24, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=24\n",
      "[LightGBM] [Warning] bagging_fraction is set=0.8372, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8372\n",
      "[LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3\n",
      "train over\n",
      "训练时间为： 1.0502004623413086\n"
     ]
    }
   ],
   "source": [
    "################################## 用最优超参数训练模型 #####################################\n",
    "print('Starting training...')\n",
    "start_time = time.time()\n",
    "best_bayes_model = lgb.LGBMClassifier(n_jobs = -1, \n",
    "                                       objective = 'binary', random_state = 50, **best_bayes_params)\n",
    "best_bayes_model.fit(X_train, Y_train, eval_metric='auc', verbose=2)\n",
    "# gbm.fit(X_train, Y_train)\n",
    "# gbm = lgb.train(params, lgb_train, num_boost_round=10, feature_name = 'auto')\n",
    "print('train over')\n",
    "end_time = time.time()\n",
    "print('训练时间为：', end_time - start_time)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "KS(Train): 0.405034\n",
      "KS(Test): 0.402629\n",
      "AUC Score(Train): 0.774199\n",
      "AUC Score(Test): 0.772021\n"
     ]
    }
   ],
   "source": [
    "################################## 模型效果 #####################################\n",
    "# get the predicted class\n",
    "# bst = lgb.Booster(model_file='model.txt')\n",
    "\n",
    "train_class_pred = best_bayes_model.predict_proba(X_train)[:, 1]\n",
    "test_class_pred = best_bayes_model.predict_proba(X_test)[:, 1]\n",
    "\n",
    "from sklearn.metrics import roc_curve\n",
    "fpr_train, tpr_train, thresholds_test = roc_curve(np.array(Y_train), train_class_pred)\n",
    "fpr_test, tpr_test, thresholds_test = roc_curve(np.array(Y_test), test_class_pred)\n",
    "# df = pd.DataFrame({'FPR': fpr_test, 'TPR': tpr_test, 'Thresholds': thresholds_test})\n",
    "# print(df)\n",
    "ks_train = max(tpr_train - fpr_train)\n",
    "ks_test = max(tpr_test - fpr_test)\n",
    "print(\"KS(Train): %f\" % ks_train)\n",
    "print(\"KS(Test): %f\" % ks_test)\n",
    "\n",
    "# get the auc\n",
    "from sklearn.metrics import roc_auc_score\n",
    "print(\"AUC Score(Train): %f\" % roc_auc_score(Y_train, train_class_pred))\n",
    "print(\"AUC Score(Test): %f\" % roc_auc_score(Y_test, test_class_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                       feature_name     element\n",
      "92                 ir_allmatch_days  595.628193\n",
      "365          als_m3_id_bank_selfnum  576.358102\n",
      "103                    pd_id_gender  462.550741\n",
      "384        als_m3_cell_bank_selfnum  407.793153\n",
      "897  alf_apirisk_time_lenth_all_sum  261.160498\n",
      "..                              ...         ...\n",
      "487    als_m12_id_bank_night_orgnum    3.569460\n",
      "654            tl_cell_t1_nbank_num    3.472390\n",
      "211                      mma_var149    3.295630\n",
      "970                cf_cons_C20_nums    2.305070\n",
      "271                      mma_var238    0.201951\n",
      "\n",
      "[83 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "################################## Feature Importance #####################################\n",
    "feature_imp = pd.Series(best_bayes_model.feature_importances_)\n",
    "feature_name = best_bayes_model._Booster.feature_name()\n",
    "feature_df = pd.DataFrame({'feature_name': feature_name, 'element': feature_imp})\n",
    "feature_df = feature_df.sort_values(by = 'element',ascending = False)\n",
    "feature_df = feature_df[feature_df['element'] > 0]\n",
    "print(feature_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "83"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(feature_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变量筛选"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PSI偏高的被剔除的变量：\n",
      "[]\n"
     ]
    }
   ],
   "source": [
    "X_train1 = X_train[feature_df.feature_name.tolist()]\n",
    "X_test1 = X_test[feature_df.feature_name.tolist()]\n",
    "#oot_X = oot_X[feature_df.feature_name.tolist()]\n",
    "cat_var = X_train1.select_dtypes('category').columns.tolist()\n",
    "#drop_vars1 = psi_var(X_train1, oot_X)\n",
    "drop_vars2 = psi_var(X_train1.drop(columns = cat_var), X_test1.drop(columns = cat_var))\n",
    "drop_vars = list(set(drop_vars2))#| set(drop_vars1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting training...\n",
      "training...\n",
      "[LightGBM] [Warning] feature_fraction is set=0.5153, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5153\n",
      "[LightGBM] [Warning] min_data_in_leaf is set=24, min_child_samples=20 will be ignored. Current value: min_data_in_leaf=24\n",
      "[LightGBM] [Warning] bagging_fraction is set=0.8372, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8372\n",
      "[LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3\n",
      "train over\n",
      "Starting training...\n",
      "training...\n",
      "train over\n",
      "Starting training...\n",
      "training...\n",
      "train over\n",
      "Starting training...\n",
      "training...\n",
      "train over\n",
      "Starting training...\n",
      "training...\n",
      "train over\n",
      "Starting training...\n",
      "training...\n",
      "train over\n"
     ]
    }
   ],
   "source": [
    "# 循环筛选：每次遍历都剔除feature_importance==0的变量\n",
    "drop_vars = []\n",
    "X_train_final = X_train1.drop(columns = drop_vars)\n",
    "while True:\n",
    "    X_test_final = X_test[X_train_final.columns]\n",
    "    num_train, num_feature = X_train_final.shape\n",
    "    W_train = np.ones(X_train_final.shape[0])\n",
    "    W_test = np.ones(X_test_final.shape[0])\n",
    "\n",
    "    # create dataset for lightgbm\n",
    "    # if you want to re-use data, remember to set free_raw_data = False\n",
    "    lgb_train = lgb.Dataset(X_train_final, Y_train, weight=W_train, free_raw_data=False)\n",
    "    lgb_eval = lgb.Dataset(X_test_final, Y_test, reference=lgb_train, weight=W_test, free_raw_data=False)\n",
    "\n",
    "    # import xgboost as xgb\n",
    "\n",
    "    print('Starting training...')\n",
    "    start_time = time.time()\n",
    "    print('training...')\n",
    "\n",
    "    # gbm.fit(X_train, Y_train)\n",
    "    gbm = lgb.LGBMClassifier(n_jobs = -1, \n",
    "                                           objective = 'binary', random_state = 50, **best_bayes_params)\n",
    "    gbm.fit(X_train_final, Y_train)\n",
    "    print('train over')\n",
    "    end_time = time.time()\n",
    "    feature_imp = pd.Series(gbm.feature_importances_)\n",
    "    feature_name = pd.Series(gbm.booster_.feature_name())\n",
    "    feature_df = pd.DataFrame({'feature_name': feature_name, 'element': feature_imp})\n",
    "#     feature_df = feature_df.sort_values(by='element', ascending=False)\n",
    "    feature_df = feature_df[feature_df['element'] > 0]\n",
    "    if len(feature_imp) == len(feature_df):\n",
    "        break\n",
    "    else:\n",
    "        X_train_final = X_train[feature_df.feature_name.tolist()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                       feature_name     element\n",
      "0                  ir_allmatch_days  665.692395\n",
      "1            als_m3_id_bank_selfnum  727.514696\n",
      "2                      pd_id_gender  511.746922\n",
      "3          als_m3_cell_bank_selfnum  333.633402\n",
      "4    alf_apirisk_time_lenth_all_sum  295.765798\n",
      "5           als_lst_id_bank_inteday  198.921599\n",
      "6             alf_ict_lenth_all_sum  250.007202\n",
      "7    alf_apirisk_time_slope_all_sum  189.722600\n",
      "8         als_lst_cell_bank_inteday  158.157542\n",
      "9              pd_id_city_rent_sort  135.862599\n",
      "10  alf_apirisk_time_slope_all_mean  177.608899\n",
      "11        als_m12_cell_bank_selfnum  314.178796\n",
      "12                  pd_id_apply_age  184.185198\n",
      "13               pd_cell_city_level  136.952700\n",
      "14         als_m6_cell_bank_selfnum   97.540499\n",
      "15            als_m6_id_min_inteday   33.712799\n",
      "16                   alf_count_cell   62.450800\n",
      "17                      cf_prob_max   71.756600\n",
      "18           alf_ict_lenth_d360_sum  131.070501\n",
      "19           als_m12_id_caon_allnum   88.999801\n",
      "20            ql_m12_id_bank_allnum   66.718380\n",
      "21           als_m1_id_bank_selfnum   22.076270\n",
      "22           alf_ict_lenth_d180_sum  103.674201\n",
      "23        pd_id_city_new_house_sort   75.218190\n",
      "24          ql_m12_id_bank_allnum_d   20.243799\n",
      "25                 ql_m12_id_orgnum   66.024199\n",
      "26                       mma_var345   33.912471\n",
      "27   als_m12_cell_nbank_max_inteday   28.258801\n",
      "28             tl_id_t2_nbank_reamt   12.924460\n",
      "29                       mma_var342   45.451820\n",
      "30                      cf_prob_min   20.681080\n",
      "31             tl_id_t4_nbank_reamt   38.054299\n",
      "32     als_m12_cell_bank_tra_orgnum   13.612300\n",
      "33   ql_m12_id_bank_national_allnum   36.244860\n",
      "34                       mma_var123   24.568030\n",
      "35                     cf_prob_cell   26.781120\n",
      "36          ql_m12_cell_bank_allnum   24.263201\n",
      "37             ql_m12_id_max_monnum   53.202590\n",
      "38               cf_cons_C29_amount   31.603290\n",
      "39                       mma_var149   10.494780\n"
     ]
    }
   ],
   "source": [
    "feature_imp = pd.Series(gbm.feature_importances_)\n",
    "feature_name = pd.Series(gbm.booster_.feature_name())\n",
    "feature_df = pd.DataFrame({'feature_name': feature_name, 'element': feature_imp})\n",
    "# feature_df = feature_df.reset_index().drop(columns=['index'])\n",
    "# feature_df = feature_df.sort_values(by='element', ascending=False)\n",
    "feature_df = feature_df[feature_df['element'] > 0]\n",
    "print(feature_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    " X_train_final = X_train[feature_df.feature_name.tolist()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "mannual_drops=[]\n",
    "# mannual_drops=['flag_profilepopulation','flag_fraudrelation_g','flag_graylist', 'pp_birthyear', 'pp_age', 'pp_gender', 'cf_cons_C13_views']\n",
    "X_train_final1 = X_train_final.drop(columns=mannual_drops)\n",
    "X_test_final = X_test[X_train_final1.columns]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "################################## 手动调整参数 #####################################\n",
    "best_bayes_params = {'bagging_fraction': 0.8372,\n",
    " 'bagging_freq': 3,\n",
    " 'boosting_type': 'gbdt',\n",
    " 'feature_fraction': 0.5153,\n",
    " 'importance_type': 'gain',\n",
    " 'learning_rate': 0.0225,\n",
    " 'max_bin': 15,\n",
    " 'max_depth': 3,\n",
    " 'min_data_in_leaf': 24,\n",
    " 'n_estimators': 90,\n",
    " 'num_leaves': 4,\n",
    " 'reg_alpha': 0.4626,\n",
    " 'reg_lambda': 0.5525}\n",
    "# 'min_gain_to_split': 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LGBMClassifier(bagging_fraction=0.8372, bagging_freq=3, feature_fraction=0.5153,\n",
       "               importance_type='gain', learning_rate=0.0225, max_bin=15,\n",
       "               max_depth=3, min_data_in_leaf=24, n_estimators=90, num_leaves=4,\n",
       "               objective='binary', random_state=50, reg_alpha=0.4626,\n",
       "               reg_lambda=0.5525)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "start_time = time.time()\n",
    "# gbm.fit(X_train, Y_train)\n",
    "gbm = lgb.LGBMClassifier(n_jobs = -1, \n",
    "                                       objective = 'binary', random_state = 50, **best_bayes_params)\n",
    "gbm.fit(X_train_final, Y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "KS(Train): 0.398742\n",
      "KS(Test): 0.409880\n",
      "AUC Score(Train): 0.771959\n",
      "AUC Score(Test): 0.770732\n"
     ]
    }
   ],
   "source": [
    "bst = gbm\n",
    "\n",
    "train_class_pred = bst.predict_proba(X_train_final)[:,1]\n",
    "test_class_pred = bst.predict_proba(X_test_final)[:,1]\n",
    "\n",
    "from sklearn.metrics import roc_curve\n",
    "fpr_train, tpr_train, thresholds_test = roc_curve(np.array(Y_train), train_class_pred)\n",
    "fpr_test, tpr_test, thresholds_test = roc_curve(np.array(Y_test), test_class_pred)\n",
    "\n",
    "ks_train = max(tpr_train - fpr_train)\n",
    "ks_test = max(tpr_test - fpr_test)\n",
    "print(\"KS(Train): %f\" % ks_train)\n",
    "print(\"KS(Test): %f\" % ks_test)\n",
    "\n",
    "# get the auc\n",
    "from sklearn.metrics import roc_auc_score\n",
    "print(\"AUC Score(Train): %f\" % roc_auc_score(Y_train, train_class_pred))\n",
    "print(\"AUC Score(Test): %f\" % roc_auc_score(Y_test, test_class_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scorecardpy as sc\n",
    "train_perf = sc.perf_eva(Y_train, train_class_pred, title=\"train\")\n",
    "test_perf = sc.perf_eva(Y_test, test_class_pred, title=\"test\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 打分看分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.13378684807256236"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.flagy.value_counts()[1]/df.flagy.value_counts()[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_p = train_class_pred.copy()\n",
    "test_p = test_class_pred.copy()\n",
    "# whole_p = whole_class_pred.copy()\n",
    "points0 = 45\n",
    "pdo = -23\n",
    "odds0 = 0.133\n",
    "B = pdo / np.log(2)\n",
    "A = points0 + B * np.log(odds0)\n",
    "train_score = np.around(A - B * np.log(train_p/(1 - train_p)))\n",
    "test_score = np.around(A - B * np.log(test_p/(1 - test_p)))\n",
    "# whole_score = np.around(A + B * np.log(whole_p/(1 - whole_p)))\n",
    "\n",
    "arr1 = np.arange(train_score.shape[0])\n",
    "train_score = pd.Series(train_score)\n",
    "s1 = pd.Series(arr1)\n",
    "train_psi = pd.concat([train_score, s1, Y_train.reset_index(drop=True)], ignore_index=True, axis=1)\n",
    "train_psi.columns = ['score', 'id', 'y']\n",
    "\n",
    "arr1 = np.arange(test_score.shape[0])\n",
    "test_score = pd.Series(test_score)\n",
    "s1 = pd.Series(arr1)\n",
    "test_psi = pd.concat([test_score, s1, Y_test.reset_index(drop=True)], ignore_index=True, axis=1)\n",
    "test_psi.columns = ['score', 'id', 'y']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'pic': {'score': <Figure size 432x288 with 2 Axes>},\n",
       " 'psi':   variable       PSI\n",
       " 0    score  0.004457}"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sc.perf_psi(score = {'train':train_psi[['score']], 'test':test_psi[['score']]},\n",
    "      label = {'train':train_psi['y'], 'test':test_psi['y']},\n",
    "      # x_limits = [300, 1000],\n",
    "      x_tick_break = 10)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "188px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
